package logger

import (
	rotatelogs "github.com/lestrrat-go/file-rotatelogs"
	"github.com/sirupsen/logrus"
	"os"
	"path/filepath"
	"time"
)

var logger = logrus.New()

func init() {

	// 创建日志目录
	if err := os.MkdirAll("logs", 0755); err != nil {
		logger.Fatalf("Failed to create logs directory: %v", err)
	}
	// 配置日志轮转
	logPath := filepath.Join("logs", "app-%Y-%m-%d.log")
	rl, err := rotatelogs.New(
		logPath,
		rotatelogs.WithLinkName("logs/app.log"),   // 生成最新日志的软链接
		rotatelogs.WithMaxAge(15*24*time.Hour),    // 保留15天
		rotatelogs.WithRotationTime(24*time.Hour), // 每天轮转一次

		// 使用本地时区（默认已经是本地时区，可省略此配置）
		rotatelogs.WithLocation(time.Local),
	)

	if err != nil {
		logger.Fatalf("日志初始化失败: %v", err)
	}

	// 配置 logrus
	logger.SetOutput(rl) // 同时输出到文件
	logger.SetFormatter(&logrus.JSONFormatter{ // JSON 格式
		TimestampFormat: "2006-01-02 15:04:05",
	})
	logger.SetLevel(logrus.InfoLevel) // 设置日志级别
}

// 不同级别日志示例
//logger.Debug("Debug message")
//logger.Warn("Warning message")
//logger.Error("Error message")

func WithFieldsInfo(fields logrus.Fields) {
	logger.WithFields(fields).Info("HTTP Request")
}

func SetWarnLog(msg string) {
	logger.Warn(msg)
}

func SetErrorLog(msg string) {
	logger.Error(msg)
}

func SetFatalfLog(msg string) {
	logger.Fatalf(msg)
}

func SetDebugLog(msg string) {
	logger.Debug(msg)
}
